#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "include/array_help.h"

// void Swap(void* vp1, void* vp2, int size) {
//     char buf[size]; // 支持VLA语法
//     memcpy(buf, vp1, size); 
//     memcpy(vp1, vp2, size); 
//     memcpy(vp2, buf, size); 
// }

void Swap(void* vp1, void* vp2, int size) {
    void* buf = malloc(size); 
    if (buf) {
        memcpy(buf, vp1, size); 
        memcpy(vp1, vp2, size); 
        memcpy(vp2, buf, size); 
        free(buf); 
        buf = NULL; 
        return;
    }

    exit(EXIT_FAILURE); // 动态内存分配失败时， 带失败错误码退出程序
}

void PrintIntArray(int arr[], int len) {
    printf("> [");
    for(int i = 0; i < len; i++) {
        printf("%d", arr[i]);
        if (i != len - 1)
            printf(", ");
    }
    printf("]\n"); 
}


int IsSorted(int arr[], int len) {
    for (int i = 1; i < len; i++) {
        if (arr[i] < arr[i - 1])
            return -1;  // 无序        
    }
    return 1; // 有序
}

// 数组拷贝，按照l, r 区间拷贝, [l, r]   0 9 
void CopyArray(int dst[], int src[], int l, int r) {
    memcpy(dst, src + l, (r - l + 1) * sizeof(int));
}

// 测试排序性能
void SortTest(int sortType, int arr[], int len) {
    // TODO: 
}

// 测试一下 array_help 
// int main(int args, const char* argv[]) {
    // int a = 3;  int b = 4; 
    // Swap(&a, &b, sizeof(int)); 
    // printf("a = %d, b = %d\n", a, b); 

    // double e = 1.414; double pi = 3.14;
    // Swap(&e, &pi, sizeof(double)); 
    // printf("e = %.4f, pi = %.4f\n", e, pi); 
    // int src[] = {1,2,3,4,5};
    // int l = 1;
    // int r = 3; 
    // int dst[r - l + 1]; 
    // CopyArray(dst, src, l, r); 
    // PrintIntArray(dst, r - l +1); 
    // return 0;
// }